package com.cictec.middleware.tde.rm.protocol.rm.decode;

import java.nio.ByteBuffer;

import org.apache.mina.core.session.IoSession;

import com.cictec.middleware.commons.utils.BinaryUtils;
import com.cictec.middleware.tde.exception.MessageDecoderException;
import com.cictec.middleware.tde.rm.protocol.AbstractMessageDecoder;
import com.cictec.middleware.tde.rm.protocol.TerminalMessage;
import com.cictec.middleware.tde.rm.protocol.TerminalMessage.Header;
import com.cictec.middleware.tde.rm.protocol.annotion.TerminalMessageDecoder;
import com.cictec.middleware.tde.rm.protocol.rm.message.Rm0x81PlatformMessage;
import com.cictec.middleware.tde.rm.protocol.rm.utils.RmBinaryUtils;

/**
 * 0x81  下发短语
 * 
 * @author ql
 *
 */
@TerminalMessageDecoder(0x81)
public class Rm0x81Decoder extends AbstractMessageDecoder {

//	private static Logger logger = LoggerFactory.getLogger(Rm0x81Decoder.class);

	@Override
	public TerminalMessage decode(Header header, ByteBuffer in, IoSession session) throws MessageDecoderException {


		Rm0x81PlatformMessage msg = new Rm0x81PlatformMessage(header);
		msg.setCreateTime(RmBinaryUtils.dwordToDateRM(in));				// 产生时间
		msg.setMessageType(BinaryUtils.unsignedByteToInt(in));			// 短语类型 HEX 1 字节 见短语类型表
		msg.setResponseType(BinaryUtils.unsignedByteToInt(in));			// 应答类型 HEX 1 字节 表示是否需要手动应 答，1 为需要，0 为不需 要，当需要手动应答时 人为确认后需再上传一 条手动应答确认 
		msg.setDisplayOn(BinaryUtils.unsignedByteToInt(in));			// 显示位置 HEX 1 字节 见显示位置表
		msg.setVoiceType(BinaryUtils.unsignedByteToInt(in));			// 声音类型 HEX 1 字节 见声音类型表
		msg.setDisplayTimes(BinaryUtils.unsignedByteToInt(in));			// 显示次数 HEX 1 字节 显示次数，0xFF 为永久 显示直到接收新的指令
		msg.setContentLength(BinaryUtils.unsignedByteToInt(in));		// 短语内容长度 HEX 1 字节 序号 8 短语内容的长度
		
		msg.setContent(BinaryUtils.bytesToString(in, msg.getContentLength()));// // 短语内容 ASCII 不定长 数据内容，用 ASCII 码 最长 200 字节
//		msg.setContent(BinaryUtils.bcd2Str(in, msg.getContentLength()));
		msg.setVoiceFileNumber(BinaryUtils.wordToInt(in));				// 报读语音文件编号 HEX 2 字节 当此字段不为空时，报 读车载终端预存 mp3

//		byte[] msgBytes = BinaryUtils.stringToBytes(pdm.getContent());
		return msg;
	}

}
